<?php
/**
 * @author Vitaly
 * Date: 27.04.12
 */

/*
 * Обрабатывает действия пользователя с сообщениями
 */

class MessageActionController extends ActionController
{
    // выполняется при каждом обращении к контроллеру
    // логинит юзера и добавляет во view его модель (удобно для отрисовки страницы)

    function before()
    {
        if(isSet($_SESSION['userid']))
        {
            $userMapper = new UserMapper();
            $this->view->user = $userMapper->find($_SESSION['userid']);
        }
    }

    function action()
    {
        header('Location: /');
    }

    // добавляет сообщение с текстом "text"

    function add()
    {
        if((!empty($this->args['text'])))
        {
            $msgMapper = new MessageMapper();
            $message = new MessageModel();
            $message->setAuthor($_SESSION['userid'])
                    ->setText($this->args['text'])
                    ->setVideo((!empty($this->args['video'])) ? $msgMapper->prepareVideo($this->args['video']) : null)
                    ->setId($msgMapper->add($message));

            // обработка тегов

            if(!empty($this->args['tags']))
                $msgMapper->tagProcess($message->getId(), $this->args['tags']);
        }
        header('Location: /');
    }

    // удаляет сообщение с id "id" при этом сравнивая id автора и id залогиненного юзера

    function delete()
    {
        $msgMapper = new MessageMapper();
        if(isSet($this->args['id']) && $msgMapper->checkAccess($this->args['id']))
        {
            $msgMapper->delete($this->args['id']);
            header('Location: /');
        }
        else
        {
            $this->view->setStructure('dummy');
            $this->view->setTitle('Error when you try delete message!');
            $this->view->text = 'Try delete message later...';
            $this->view->draw();
        }
    }

    // редактирует сообщение с id "id" и текстом "text"
    // сравнивает автора сообщения и залогиненного пользователя
    // показывает окно редактирования

    function edit()
    {
        $messageMapper = new MessageMapper();
        $haveAccess = $messageMapper->checkAccess($this->args['id']);
        if(isSet($this->args['id']) && isSet($this->args['text']))
        {
            if($haveAccess)
            {
                $message = new MessageModel();
                $message->setId($this->args['id'])
                        ->setText($this->args['text']);
                $messageMapper->update($message);
                header('Location: /');
            }
            else
            {
                $this->view->setStructure('dummy');
                $this->view->setTitle('You do not have access for edit this message');
                $this->view->text = 'Sorry...)';
                $this->view->draw();
            }
        }
        elseif($haveAccess && isSet($this->args['id']))
        {
            $this->view->message = $messageMapper->find($this->args['id']);
            $this->view->setStructure('message_edit')
                       ->setTitle('Edit message')
                       ->draw();
        }
    }
}